package com.lanou3g.code0417.dirty;

/**
 * Created by dllo on 18/4/17.
 */
//多线程模型下都加锁
public class Utils {
    private final Object lock = new Object();

    // a 1
    //Thread 1 : b 2
    //Thread 2 : c 3

    //两个线程同时写一个对象，不允许产生的数据产生了叫做脏数据   eg：c 2
    public void updatePerson(Person person,String name,int age){

        synchronized (lock){   //加锁 解决产生脏数据
            person.setName(name);
            try {
                //让线程沉睡1s，为了让脏读效果更容易出现
                Thread.sleep(1000);//1000 ms
            } catch (Exception e) {
                e.printStackTrace();
            }
            person.setAge(age);
        }

    }


    public void showPerson(Person person){
            //效率低下，因为如果没有修改需求，只读 仍然需要等 排队等待
        synchronized (lock){  //写的时候锁是关闭的就不能读，直到写完后锁解开，此线程才可以读
            System.out.println("姓名:" + person.getName());
            System.out.println("年龄：" +person.getAge());
        }

    }


}
